package cn.iocoder.yudao.module.book.service.protocol;

import cn.iocoder.yudao.module.book.controller.app.protocolAndmethod.vo.AppProtocolRespVO;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated;

import cn.iocoder.yudao.module.book.controller.admin.protocol.vo.*;
import cn.iocoder.yudao.module.book.dal.dataobject.protocol.ProtocolDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;

import cn.iocoder.yudao.module.book.dal.mysql.protocol.ProtocolMapper;

import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.book.enums.ErrorCodeConstants.*;

/**
 * 协议 Service 实现类
 *
 * @author xi
 */
@Service
@Validated
public class ProtocolServiceImpl implements ProtocolService {

    @Resource
    private ProtocolMapper protocolMapper;

    @Override
    public Integer createProtocol(ProtocolSaveReqVO createReqVO) {
        // 插入
        ProtocolDO protocol = BeanUtils.toBean(createReqVO, ProtocolDO.class);
        protocolMapper.insert(protocol);
        // 返回
        return protocol.getProtocolId();
    }

    @Override
    public void updateProtocol(ProtocolSaveReqVO updateReqVO) {
        // 校验存在
        validateProtocolExists(updateReqVO.getProtocolId());
        // 更新
        ProtocolDO updateObj = BeanUtils.toBean(updateReqVO, ProtocolDO.class);
        protocolMapper.updateById(updateObj);
    }

    @Override
    public void deleteProtocol(Integer id) {
        // 校验存在
        validateProtocolExists(id);
        // 删除
        protocolMapper.deleteById(id);
    }

    private void validateProtocolExists(Integer id) {
        if (protocolMapper.selectById(id) == null) {
            throw exception(PROTOCOL_NOT_EXISTS);
        }
    }

    @Override
    public ProtocolDO getProtocol(Integer id) {
        return protocolMapper.selectById(id);
    }

    @Override
    public PageResult<ProtocolDO> getProtocolPage(ProtocolPageReqVO pageReqVO) {
        return protocolMapper.selectPage(pageReqVO);
    }

    @Override
    public AppProtocolRespVO getAll() {
        System.out.println(protocolMapper.selectAll());
        return protocolMapper.selectAll();
    }

}